package ucla.encuestaMatic.controlador.servicios;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.obelisco.modelo.data.DataGenerica;
import com.obelisco.vista.inicio.Aplicacion;

import ucla.encuestaMatic.controlador.interfaces.IServicioAdministracionAplicacionEncuesta;
import ucla.encuestaMatic.modelo.dao.ServicioEncuestaPersonaDAO;
import ucla.encuestaMatic.modelo.dao.ServicioEncuestaPreguntaPersonaDAO;
import ucla.encuestaMatic.modelo.dao.ServicioPersonaDAO;
import ucla.encuestaMatic.modelo.dao.ServicioPreguntaDAO;
import ucla.encuestaMatic.modelo.data.Encuesta;
import ucla.encuestaMatic.modelo.data.EncuestaPersona;
import ucla.encuestaMatic.modelo.data.EncuestaPreguntaPersona;
import ucla.encuestaMatic.modelo.data.Persona;
import ucla.encuestaMatic.modelo.data.Pregunta;

public class ServicioAdministracionAplicacionEncuesta implements IServicioAdministracionAplicacionEncuesta {

	private ServicioPreguntaDAO servicioPreguntaDAO;
	private ServicioPersonaDAO servicioPersonaDAO;
	private ServicioEncuestaPersonaDAO servicioEncuestaPersonaDAO;
	private ServicioEncuestaPreguntaPersonaDAO servicioEncuestaPreguntaPersonaDAO;

	@Override
	public Boolean chequearEncuestaRespondidaPorPersona(Encuesta encuesta) {
		String login = Aplicacion.getApp().getContexto().getUsuarioActual().getLogin();
		List<Criterion> criterios = new ArrayList<Criterion>();
		criterios.add(Restrictions.eq("id.encuesta", encuesta));
		criterios.add(Restrictions.eq("id.persona.cedula", login));
		List<EncuestaPersona> encuestaPersonas = this.servicioEncuestaPersonaDAO.buscarPorPropiedades(criterios, DataGenerica.DATA_ACTIVO);
		return encuestaPersonas == null || encuestaPersonas.isEmpty();
	}
	
	public List<Pregunta> buscarPreguntasPorEncuesta(Encuesta encuesta) {
		List<Order> orden = new ArrayList<Order>();
		orden.add(Order.asc("numero"));	
		List<Pregunta> preguntas = this.servicioPreguntaDAO.buscarPorPropiedad("encuesta", encuesta, DataGenerica.DATA_ACTIVO, orden);
		for (Pregunta pregunta : preguntas)
			pregunta.getOpcionPreguntas().size();
		return preguntas;
	}
	
	@Override
	public Persona buscarPersonaEncuestada() {
		String login = Aplicacion.getApp().getContexto().getUsuarioActual().getLogin();
		List<Persona> personas = this.servicioPersonaDAO.buscarPorPropiedad("cedula", login, DataGenerica.DATA_ACTIVO);
		return personas != null && !personas.isEmpty() ? personas.get(0) : null;
	}
	
	@Override
	public void guardarEncuestaPersona(EncuestaPersona encuestaPersona) {
		this.servicioEncuestaPersonaDAO.guardar(encuestaPersona);
	}
	
	@Override
	public void guardarEncuestaPreguntaPersona(EncuestaPreguntaPersona encuestaPreguntaPersona) {
		this.servicioEncuestaPreguntaPersonaDAO.guardar(encuestaPreguntaPersona);
	}
	
	// Getter y Setter
	public ServicioPreguntaDAO getServicioPreguntaDAO() {
		return servicioPreguntaDAO;
	}

	public void setServicioPreguntaDAO(ServicioPreguntaDAO servicioPreguntaDAO) {
		this.servicioPreguntaDAO = servicioPreguntaDAO;
	}

	public ServicioPersonaDAO getServicioPersonaDAO() {
		return servicioPersonaDAO;
	}

	public void setServicioPersonaDAO(ServicioPersonaDAO servicioPersonaDAO) {
		this.servicioPersonaDAO = servicioPersonaDAO;
	}

	public ServicioEncuestaPersonaDAO getServicioEncuestaPersonaDAO() {
		return servicioEncuestaPersonaDAO;
	}

	public void setServicioEncuestaPersonaDAO(
			ServicioEncuestaPersonaDAO servicioEncuestaPersonaDAO) {
		this.servicioEncuestaPersonaDAO = servicioEncuestaPersonaDAO;
	}

	public ServicioEncuestaPreguntaPersonaDAO getServicioEncuestaPreguntaPersonaDAO() {
		return servicioEncuestaPreguntaPersonaDAO;
	}

	public void setServicioEncuestaPreguntaPersonaDAO(
			ServicioEncuestaPreguntaPersonaDAO servicioEncuestaPreguntaPersonaDAO) {
		this.servicioEncuestaPreguntaPersonaDAO = servicioEncuestaPreguntaPersonaDAO;
	}
}
